package fr.cie.blog.listeners;

import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.sql.DataSource;

import org.apache.log4j.Logger;

/**
 * @author Jee3 Récupère la ressource du fichier context.xml, la parse et
 *         l'injecte dans le contexte applicatif.
 */
public class DataSourceListener implements ServletContextListener {
	
	


	/**
	 * Log4J the logger.
	 */
	private static final Logger LOG = Logger
			.getLogger(DataSourceListener.class);

	/**
	 * context.
	 */
	private Context context = null;

	// fonction appelée lors de la destruction du lanceur
	@Override
	public final void contextDestroyed(
			final ServletContextEvent servletCtxtEvent) {
		try {
			// fermer le context
			if (context != null) {
				context.close();
			}
		} catch (final Exception e) {
			LOG.debug("Erreur lors de initCtx !" + e);
		}
	}

	// fonction appelée lors de la création du lanceur
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * javax.servlet.ServletContextListener#contextInitialized(javax.servlet
	 * .ServletContextEvent)
	 */
	@Override
	public final void contextInitialized(
			final ServletContextEvent servletCtxtEvent) {

		final ServletContext servletContext = servletCtxtEvent
				.getServletContext();
		
		
		final String dataSourceJNDI = servletContext
				.getInitParameter("dataSourceJNDI");

		LOG.debug("/* ============== CHARGEMENT DE "
				+ servletContext.getContextPath()
				+ " =========================*/");

		try {
			context = new InitialContext();

			final DataSource dataSource = (DataSource) context
					.lookup(dataSourceJNDI);

			if (dataSource == null) {
				LOG.debug("GRAVE ERREUR LORS DU DEMARRAGE DE L'APPLICATION "
						+ "=> Datasource is null ");
			} else {
				LOG.debug("LA DATASOURCE A ETE RECUPEREE ET INJECTEE DANS "
						+ "LE CONTEXT");
				servletContext.setAttribute("dataSource", dataSource);
				// test de connection !!

				try {
					LOG.debug("La connexion a été établie ? "
							+ !dataSource.getConnection().isClosed());
				} catch (final SQLException e) {
					final String message = "GRAVE ERREUR LORS DE LA "
							+ "TENTATIVE DE CONNEXION A : "
							+ "hostingmysql47.amen.fr "
							+ "altenide_com_matthieumartineau";
					LOG.error(message, e);
				}

			}

		} catch (final NamingException e) {
			LOG.error("erreur dans DataSourceListener.contextInitialized()", e);

		} finally {
			try {
				// fermer le context
				if (context != null) {
					context.close();
				}
			} catch (final Exception e) {
				LOG.debug("Erreur lors de initCtx !" + e);
			}
		}
	}
}
